#if 1
/*
 ***************************************************************************
 * Ralink Tech Inc.
 * 4F, No. 2 Technology 5th Rd.
 * Science-based Industrial Park
 * Hsin-chu, Taiwan, R.O.C.
 *
 * (c) Copyright, Ralink Technology, Inc.
 *
 * All rights reserved. Ralink's source code is an unpublished work and the
 * use of a copyright notice does not imply otherwise. This source code
 * contains confidential trade secret material of Ralink Tech. Any attemp
 * or participation in deciphering, decoding, reverse engineering or in any
 * way altering the source code is stricitly prohibited, unless the prior
 * written consent of Ralink Technology, Inc. is obtained.
 ***************************************************************************
 *
 * $Id: //WIFI_SOC/MP/SDK_4_2_0_0/RT288x_SDK/source/user/rt2880_app/gpio/gpio.c#1 $
 */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <signal.h>
#include <sys/ioctl.h>
#include <linux/autoconf.h>
#include "ralink_gpio.h"

#include "mtk7620_local.h"

enum {
#if defined (CONFIG_RALINK_RT3052)
	gpio_group_2300 = eGPIO_NO_24,
	gpio_group_3924 = eGPIO_NO_40,
	gpio_group_5140 = eGPIO_NO_52,
#elif defined (CONFIG_RALINK_RT3883)
	gpio_group_2300 = eGPIO_NO_24,
	gpio_group_3924 = eGPIO_NO_40,
	gpio_group_7140 = eGPIO_NO_72,
	gpio_group_9572 = eGPIO_NO_96,
#elif defined (CONFIG_RALINK_RT3352)
	gpio_group_2300 = eGPIO_NO_24,
	gpio_group_3924 = eGPIO_NO_40,
	gpio_group_4540 = eGPIO_NO_46,
#elif defined (CONFIG_RALINK_RT5350)
	gpio_group_2100 = eGPIO_NO_24,
	gpio_group_2722 = eGPIO_NO_28,
#elif defined (CONFIG_RALINK_RT6855A)
	gpio_group_1500 = eGPIO_NO_16,
	gpio_group_3116 = eGPIO_NO_32,
#elif defined (CONFIG_RALINK_MT7620)
	gpio_group_2300 = eGPIO_NO_24,
	gpio_group_3924 = eGPIO_NO_40,
	gpio_group_7140 = eGPIO_NO_72,
	gpio_group_72 = eGPIO_NO_73,
#elif defined (CONFIG_RALINK_MT7621)
	gpio_group_3100 = eGPIO_NO_32,
	gpio_group_6332 = eGPIO_NO_64,
	gpio_group_9564 = eGPIO_NO_96,
#elif defined (CONFIG_RALINK_MT7628)
	gpio_group_2300 = eGPIO_NO_24,
	gpio_group_3924 = eGPIO_NO_40,
	gpio_group_7140 = eGPIO_NO_72,
	gpio_group_72 = eGPIO_NO_73,
#else
	gpio_group_2300,
#endif
};

e_ret mtk_gpio_set_dir(int dev_fd, unsigned char gpio, unsigned char dir)
{
	int rc;
	int reg_val;
	int req_opt;
	unsigned char gpio_bit;

	reg_val = 0;
	if (dir == eGPIO_DIR_IN) {
#if defined (CONFIG_RALINK_RT3052)
		if (gpio >= gpio_group_5140) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_3924) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO5140_SET_DIR_IN;
		} else if (gpio >= gpio_group_2300) {
			gpio_bit = gpio - gpio_group_2300;
			req_opt = RALINK_GPIO3924_SET_DIR_IN;
		}
#elif defined (CONFIG_RALINK_RT3883)
		if (gpio >= gpio_group_9572) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_7140) {
			gpio_bit = gpio - gpio_group_7140;
			req_opt = RALINK_GPIO9572_SET_DIR_IN;
		} else if (gpio >= gpio_group_3924) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO7140_SET_DIR_IN;
		} else if (gpio >= gpio_group_2300) {
			gpio_bit = gpio - gpio_group_2300;
			req_opt = RALINK_GPIO3924_SET_DIR_IN;
		}
#elif defined (CONFIG_RALINK_RT3352)
		if (gpio >= gpio_group_4540) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_3924) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO4540_SET_DIR_IN;
		} else if (gpio >= gpio_group_2300) {
			gpio_bit = gpio - gpio_group_2300;
			req_opt = RALINK_GPIO3924_SET_DIR_IN;
		}
#elif defined (CONFIG_RALINK_RT5350)
		if (gpio >= gpio_group_2722) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_2100) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO2722_SET_DIR_IN;
		}
#elif defined (CONFIG_RALINK_RT6855A)
		if (gpio >= gpio_group_3116) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_3116) {
			gpio_bit = gpio - gpio_group_3116;
			req_opt = RALINK_GPIO3116_SET_DIR_IN;
		}
#elif defined (CONFIG_RALINK_MT7620)
		if (gpio >= gpio_group_72) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_7140) {
			gpio_bit = gpio - gpio_group_7140;
			req_opt = RALINK_GPIO72_SET_DIR_IN;
		} else if (gpio >= gpio_group_3924) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO7140_SET_DIR_IN;
		} else if (gpio >= gpio_group_2300) {
			gpio_bit = gpio - gpio_group_2300;
			req_opt = RALINK_GPIO3924_SET_DIR_IN;
		}
#elif defined (CONFIG_RALINK_MT7621)
		if (gpio >= gpio_group_9564) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_6332) {
			gpio_bit = gpio - gpio_group_6332;
			req_opt = RALINK_GPIO9564_SET_DIR_IN;
		} else if (gpio >= gpio_group_3924) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO6332_SET_DIR_IN;
		}
#elif defined (CONFIG_RALINK_MT7628)
		if (gpio >= gpio_group_72) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_7140) {
			gpio_bit = gpio - gpio_group_7140;
			req_opt = RALINK_GPIO72_SET_DIR_IN;
		} else if (gpio >= gpio_group_3924) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO7140_SET_DIR_IN;
		} else if (gpio >= gpio_group_2300) {
			gpio_bit = gpio - gpio_group_2300;
			req_opt = RALINK_GPIO3924_SET_DIR_IN;
		}
#endif
		else {
			req_opt = RALINK_GPIO_SET_DIR_IN;
			gpio_bit = gpio;
		}
	} else {
#if defined (CONFIG_RALINK_RT3052)
		if (gpio >= gpio_group_5140) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_3924) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO5140_SET_DIR_OUT;
		} else if (gpio >= gpio_group_2300) {
			gpio_bit = gpio - gpio_group_2300;
			req_opt = RALINK_GPIO3924_SET_DIR_OUT;
		}
#elif defined (CONFIG_RALINK_RT3883)
		if (gpio >= gpio_group_9572) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_7140) {
			gpio_bit = gpio - gpio_group_7140;
			req_opt = RALINK_GPIO9572_SET_DIR_OUT;
		} else if (gpio >= gpio_group_3924) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO7140_SET_DIR_OUT;
		} else if (gpio >= gpio_group_2300) {
			gpio_bit = gpio - gpio_group_2300;
			req_opt = RALINK_GPIO3924_SET_DIR_OUT;
		}
#elif defined (CONFIG_RALINK_RT3352)
		if (gpio >= gpio_group_4540) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_3924) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO4540_SET_DIR_OUT;
		} else if (gpio >= gpio_group_2300) {
			gpio_bit = gpio - gpio_group_2300;
			req_opt = RALINK_GPIO3924_SET_DIR_OUT;
		}
#elif defined (CONFIG_RALINK_RT5350)
		if (gpio >= gpio_group_2722) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_2100) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO2722_SET_DIR_OUT;
		}
#elif defined (CONFIG_RALINK_RT6855A)
		if (gpio >= gpio_group_3116) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_3116) {
			gpio_bit = gpio - gpio_group_3116;
			req_opt = RALINK_GPIO3116_SET_DIR_OUT;
		}
#elif defined (CONFIG_RALINK_MT7620)
		if (gpio >= gpio_group_72) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_7140) {
			gpio_bit = gpio - gpio_group_7140;
			req_opt = RALINK_GPIO72_SET_DIR_OUT;
		} else if (gpio >= gpio_group_3924) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO7140_SET_DIR_OUT;
		} else if (gpio >= gpio_group_2300) {
			gpio_bit = gpio - gpio_group_2300;
			req_opt = RALINK_GPIO3924_SET_DIR_OUT;
		}
#elif defined (CONFIG_RALINK_MT7621)
		if (gpio >= gpio_group_9564) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_6332) {
			gpio_bit = gpio - gpio_group_6332;
			req_opt = RALINK_GPIO9564_SET_DIR_OUT;
		} else if (gpio >= gpio_group_3924) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO6332_SET_DIR_OUT;
		}
#elif defined (CONFIG_RALINK_MT7628)
		if (gpio >= gpio_group_72) {
			return (eRET_INVALID_ARG);
		} else if (gpio >= gpio_group_7140) {
			gpio_bit = gpio - gpio_group_7140;
			req_opt = RALINK_GPIO72_SET_DIR_OUT;
		} else if (gpio >= gpio_group_3924) {
			gpio_bit = gpio - gpio_group_3924;
			req_opt = RALINK_GPIO7140_SET_DIR_OUT;
		} else if (gpio >= gpio_group_2300) {
			gpio_bit = gpio - gpio_group_2300;
			req_opt = RALINK_GPIO3924_SET_DIR_OUT;
		}
#endif
		else {
			req_opt = RALINK_GPIO_SET_DIR_OUT;
			gpio_bit = gpio;
		}
	}

	mask_set_bit(reg_val, gpio_bit);

	rc = ioctl(dev_fd, req_opt, reg_val);
	sysmgr_dbg("ioctl(%d, req_opt:%d, reg_val[0x%08X]), gpio_bit:%d rc: %d\n", dev_fd, req_opt, reg_val, gpio_bit,
		   rc);
	if (rc < 0) {
		sysmgr_err("ioctl(%d, req_opt:%d, reg_val[0x%08X]), gpio_bit:%d rc: %d\n", dev_fd, req_opt, reg_val,
			   gpio_bit, rc);
		return (eRET_FAILURE);
	}
	return (eRET_SUCCESS);
}

e_ret mtk_gpio_read(int dev_fd, unsigned char gpio, unsigned long *val)
{
	int rc;
	int reg_val;
	int req_opt;
	unsigned char gpio_bit;

	*val = 0;

#if defined (CONFIG_RALINK_RT3052)
	if (gpio >= gpio_group_5140) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_3924) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO5140_READ;
	} else if (gpio >= gpio_group_2300) {
		gpio_bit = gpio - gpio_group_2300;
		req_opt = RALINK_GPIO3924_READ;
	}
#elif defined (CONFIG_RALINK_RT3883)
	if (gpio >= gpio_group_9572) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_7140) {
		gpio_bit = gpio - gpio_group_7140;
		req_opt = RALINK_GPIO9572_READ;
	} else if (gpio >= gpio_group_3924) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO7140_READ;
	} else if (gpio >= gpio_group_2300) {
		gpio_bit = gpio - gpio_group_2300;
		req_opt = RALINK_GPIO3924_READ;
	}
#elif defined (CONFIG_RALINK_RT3352)
	if (gpio >= gpio_group_4540) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_3924) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO4540_READ;
	} else if (gpio >= gpio_group_2300) {
		gpio_bit = gpio - gpio_group_2300;
		req_opt = RALINK_GPIO3924_READ;
	}
#elif defined (CONFIG_RALINK_RT5350)
	if (gpio >= gpio_group_2722) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_2100) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO2722_READ;
	}
#elif defined (CONFIG_RALINK_RT6855A)
	if (gpio >= gpio_group_3116) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_3116) {
		gpio_bit = gpio - gpio_group_3116;
		req_opt = RALINK_GPIO3116_SET_DIR_IN;
	}
#elif defined (CONFIG_RALINK_MT7620)
	if (gpio >= gpio_group_72) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_7140) {
		gpio_bit = gpio - gpio_group_7140;
		req_opt = RALINK_GPIO72_READ;
	} else if (gpio >= gpio_group_3924) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO7140_READ;
	} else if (gpio >= gpio_group_2300) {
		gpio_bit = gpio - gpio_group_2300;
		req_opt = RALINK_GPIO3924_READ;
	}
#elif defined (CONFIG_RALINK_MT7621)
	if (gpio >= gpio_group_9564) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_6332) {
		gpio_bit = gpio - gpio_group_6332;
		req_opt = RALINK_GPIO9564_READ;
	} else if (gpio >= gpio_group_3924) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO6332_READ;
	}
#elif defined (CONFIG_RALINK_MT7628)
	if (gpio >= gpio_group_72) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_7140) {
		gpio_bit = gpio - gpio_group_7140;
		req_opt = RALINK_GPIO72_READ;
	} else if (gpio >= gpio_group_3924) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO7140_READ;
	} else if (gpio >= gpio_group_2300) {
		gpio_bit = gpio - gpio_group_2300;
		req_opt = RALINK_GPIO3924_READ;
	}
#endif
	else {
		req_opt = RALINK_GPIO_READ;
		gpio_bit = gpio;
	}

	reg_val = 0;
	rc = ioctl(dev_fd, req_opt, &reg_val);
	sysmgr_dbg("ioctl(%d, req_opt:%d, reg_val[0x%08X]), gpio_bit:%d rc: %d\n", dev_fd, req_opt, reg_val, gpio_bit,
		   rc);
	if (rc < 0) {
		sysmgr_err("ioctl(%d, req_opt:%d, reg_val[0x%08X]), gpio_bit:%d rc: %d\n", dev_fd, req_opt, reg_val,
			   gpio_bit, rc);
		return (eRET_FAILURE);
	}

	*val = mask_test_bit(reg_val, gpio_bit);
	return (eRET_SUCCESS);

}

e_ret mtk_gpio_write(int dev_fd, unsigned char gpio, unsigned long val)
{
	int rc;
	int reg_val;
	int req_opt;
	unsigned char gpio_bit;

#if defined (CONFIG_RALINK_RT3052)
	if (gpio >= gpio_group_5140) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_3924) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO5140_WRITE;
	} else if (gpio >= gpio_group_2300) {
		gpio_bit = gpio - gpio_group_2300;
		req_opt = RALINK_GPIO3924_WRITE;
	}
#elif defined (CONFIG_RALINK_RT3883)
	if (gpio >= gpio_group_9572) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_7140) {
		gpio_bit = gpio - gpio_group_7140;
		req_opt = RALINK_GPIO9572_WRITE;
	} else if (gpio >= gpio_group_3924) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO7140_WRITE;
	} else if (gpio >= gpio_group_2300) {
		gpio_bit = gpio - gpio_group_2300;
		req_opt = RALINK_GPIO3924_WRITE;
	}
#elif defined (CONFIG_RALINK_RT3352)
	if (gpio >= gpio_group_4540) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_3924) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO4540_WRITE;
	} else if (gpio >= gpio_group_2300) {
		gpio_bit = gpio - gpio_group_2300;
		req_opt = RALINK_GPIO3924_WRITE;
	}
#elif defined (CONFIG_RALINK_RT5350)
	if (gpio >= gpio_group_2722) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_2100) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO2722_WRITE;
	}
#elif defined (CONFIG_RALINK_RT6855A)
	if (gpio >= gpio_group_3116) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_3116) {
		gpio_bit = gpio - gpio_group_3116;
		req_opt = RALINK_GPIO3116_SET_DIR_IN;
	}
#elif defined (CONFIG_RALINK_MT7620)
	if (gpio >= gpio_group_72) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_7140) {
		gpio_bit = gpio - gpio_group_7140;
		req_opt = RALINK_GPIO72_WRITE;
	} else if (gpio >= gpio_group_3924) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO7140_WRITE;
	} else if (gpio >= gpio_group_2300) {
		gpio_bit = gpio - gpio_group_2300;
		req_opt = RALINK_GPIO3924_WRITE;
	}
#elif defined (CONFIG_RALINK_MT7621)
	if (gpio >= gpio_group_9564) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_6332) {
		gpio_bit = gpio - gpio_group_6332;
		req_opt = RALINK_GPIO9564_WRITE;
	} else if (gpio >= gpio_group_3924) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO6332_WRITE;
	}
#elif defined (CONFIG_RALINK_MT7628)
	if (gpio >= gpio_group_72) {
		return (eRET_INVALID_ARG);
	} else if (gpio >= gpio_group_7140) {
		gpio_bit = gpio - gpio_group_7140;
		req_opt = RALINK_GPIO72_WRITE;
	} else if (gpio >= gpio_group_3924) {
		gpio_bit = gpio - gpio_group_3924;
		req_opt = RALINK_GPIO7140_WRITE;
	} else if (gpio >= gpio_group_2300) {
		gpio_bit = gpio - gpio_group_2300;
		req_opt = RALINK_GPIO3924_WRITE;
	}
#endif
	else {
		req_opt = RALINK_GPIO_WRITE;
		gpio_bit = gpio;
	}

	reg_val = 0;
	mask_set_bit(reg_val, gpio_bit);
	rc = ioctl(dev_fd, req_opt, reg_val);
	sysmgr_dbg("ioctl(%d, req_opt:%d, reg_val[0x%08X]), rc: %d\n", dev_fd, req_opt, reg_val, rc);
	if (rc < 0) {
		sysmgr_err("ioctl(%d, req_opt:%d, reg_val[0x%08X]), rc: %d\n", dev_fd, req_opt, reg_val, rc);
		return (eRET_FAILURE);
	}

	return (eRET_SUCCESS);

}

e_ret mtk_gpio_set_irq(int dev_fd, unsigned char enable)
{

	int rc;
	int req_opt;

	if (enable) {
		req_opt = RALINK_GPIO_ENABLE_INTP;
	} else {
		req_opt = RALINK_GPIO_DISABLE_INTP;
	}

	rc = ioctl(dev_fd, req_opt);
	sysmgr_dbg("ioctl(%d, req_opt:%d), rc: %d\n", dev_fd, req_opt, rc);
	if (rc < 0) {
		sysmgr_err("ioctl(%d, req_opt:%d), rc: %d\n", dev_fd, req_opt, rc);
		return (eRET_FAILURE);
	}

	return (eRET_SUCCESS);
}

e_ret mtk_gpio_reg_proc(int dev_fd, unsigned char gpio, unsigned long pid)
{
	int rc;
	ralink_gpio_reg_info info;

	info.pid = pid;
	info.irq = gpio;

	rc = ioctl(dev_fd, RALINK_GPIO_REG_IRQ, &info);
	sysmgr_dbg("ioctl(%d, RALINK_GPIO_REG_IRQ, pid:%d, gpio:%d), rc: %d\n", dev_fd, info.pid, info.irq, rc);
	if (rc < 0) {
		sysmgr_dbg("ioctl(%d, RALINK_GPIO_REG_IRQ, pid:%d, gpio:%d), rc: %d\n", dev_fd, info.pid, info.irq, rc);
		return (eRET_FAILURE);
	}

	return (eRET_SUCCESS);
}

e_ret mtk_gpio_get_intp(int dev_fd, unsigned char gpio, unsigned char *intp)
{
	int rc;
	unsigned long io_val;

	/* Input gpio Number. */
	io_val = gpio;

	rc = ioctl(dev_fd, RALINK_GPIO_GET_INTP, &io_val);
	sysmgr_dbg("ioctl(%d, RALINK_GPIO_GET_INTP, gpio:%d, intp: %lu), rc: %d\n", dev_fd, gpio, io_val, rc);
	if (rc < 0) {
		sysmgr_dbg("ioctl(%d, RALINK_GPIO_GET_INTP, gpio:%d, intp: %lu), rc: %d\n", dev_fd, gpio, io_val, rc);
		return (eRET_FAILURE);
	}

	/* Output Interrupt happen or not. 0 -N, 1 -Short Press, 2 - Long Press */
	*intp = (io_val & 0xFF);

	return (eRET_SUCCESS);
}

e_ret mtk_gpio_set_led(int dev_fd, unsigned char gpio, tled_cfg * ledcfg)
{
	int rc;
	ralink_gpio_led_info led;

	led.gpio = gpio;
	led.on = ledcfg->on;
	led.off = ledcfg->off;
	led.blinks = ledcfg->blinks;
	led.rests = ledcfg->rests;
	led.times = ledcfg->times;
	led.on_delay = ledcfg->on_delay;

	rc = ioctl(dev_fd, RALINK_GPIO_LED_SET, &led);
	sysmgr_dbg("ioctl(%2d, RALINK_GPIO_LED_SET, gpio: %2d [%4d-%4d-%4d-%4d-%4d]), rc: %d\n",
		   dev_fd, led.gpio, led.on, led.off, led.blinks, led.rests, led.times, rc);
	if (rc < 0) {
		sysmgr_err("ioctl(%2d, RALINK_GPIO_LED_SET, gpio: %2d [%4d-%4d-%4d-%4d-%4d]), rc: %d\n",
			   dev_fd, led.gpio, led.on, led.off, led.blinks, led.rests, led.times, rc);
		return (eRET_FAILURE);
	}

	return (eRET_SUCCESS);
}
#endif
